// 原始数组
const list = [{
  id: 'a',
  pid: '',
  name: '总裁办'
},
{
  id: 'b',
  pid: '',
  name: '行政部'
},
{
  id: 'c',
  pid: '',
  name: '财务部'
},
{
  id: 'd',
  pid: 'c',
  name: '财务核算部'
},
{
  id: 'e',
  pid: 'c',
  name: '税务管理部'
},
{
  id: 'f',
  pid: 'e',
  name: '税务管理 A 部'
},
{
  id: 'g',
  pid: 'e',
  name: '税务管理 B 部'
}
]

// 表示根
/* const ROOT_ID = ''

function fn1(list) {
  // 从 list 中找，谁的 pid 等于 ROOT_ID 的，就把这个谁添加到新数组
  const arr = []
  list.forEach(item => {
    if (item.pid === ROOT_ID) {
      arr.push(item)
    }
  })
  return arr
}

const arr = fn1(list)
console.log(arr) */

const ROOT_ID = ''

// !之所以改造，是因为后续我再调用 fn1 的时候，第二个参数能够根据我传递的灵活变化
function fn1(list, id = ROOT_ID) {
  const arr = []
  list.forEach(item => {
    if (item.pid === id) {
      const children = fn1(list, item.id)
      if (children.length) {
        item.children = children
      }
      arr.push(item)
    }
  })
  return arr
}

const arr = fn1(list)
console.log(arr)
